﻿using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Configuration;
using Alexim.Model;
using Alexim.BL;
using Esav.ExceptionManagement;


namespace RelateImageDocALS
{
    public class RelateImageCommDes
    {
        ImgCommodityBL objImgComBL = new ImgCommodityBL();
        ImgCommodityM objImgComM = new ImgCommodityM();
        SendMail objSendMail = new SendMail();

        protected internal String _separator;
        public String separator
        {
            get { return _separator; }
            set { _separator = value; }
        }

        protected internal String _pathDocumentsComm;
        public String pathDocumentsComm
        {
            get { return _pathDocumentsComm; }
            set { _pathDocumentsComm = value; }
        }

        protected internal String _pathDocumentsRead;
        public String pathDocumentsRead
        {
            get { return _pathDocumentsRead; }
            set { _pathDocumentsRead = value; }
        }

        protected internal String _serverSMTP;
        public String serverSMTP
        {
            get { return _serverSMTP; }
            set { _serverSMTP = value; }
        }

        protected internal String _userSMTP;
        public String userSMTP
        {
            get { return _userSMTP; }
            set { _userSMTP = value; }
        }

        protected internal String _passwordSMTP;
        public String passwordSMTP
        {
            get { return _passwordSMTP; }
            set { _passwordSMTP = value; }
        }

        protected internal String _fromMail;
        public String fromMail
        {
            get { return _fromMail; }
            set { _fromMail = value; }
        }

        protected internal String _toMailSystems;
        public String toMailSystems
        {
            get { return _toMailSystems; }
            set { _toMailSystems = value; }
        }

        private String _pathDocImgRelComm_NoProcesados;
        public String pathDocImgRelComm_NoProcesados
        {
            get { return _pathDocImgRelComm_NoProcesados; }
            set { _pathDocImgRelComm_NoProcesados = value; }
        }


        private Int32 _maxSize;
        public Int32 maxSize
        {
            get { return _maxSize; }
            set { _maxSize = value; }
        }
        

        public void DocumentRelated()
        {
            String[] rutaArchivosArray;
            FileInfo archivoInfo;

            this._separator = ConfigurationSettings.AppSettings["Separador"].ToString();
            this._maxSize = Int32.Parse(ConfigurationSettings.AppSettings["maxSize"].ToString());
            this._pathDocumentsComm = ConfigurationSettings.AppSettings["pathDocImgRelCommDest"].ToString();
            this._pathDocumentsRead = ConfigurationSettings.AppSettings["pathDocReadImgCommDest"].ToString();
            this._pathDocImgRelComm_NoProcesados = ConfigurationSettings.AppSettings["pathDocImgRelCommDest_NoProcesadosDest"].ToString();
           
            this._serverSMTP = ConfigurationSettings.AppSettings["serverSMTP"].ToString();
            this._userSMTP = ConfigurationSettings.AppSettings["userSMTP"].ToString();
            this._passwordSMTP = ConfigurationSettings.AppSettings["passwordSMTP"].ToString();
            this._fromMail = ConfigurationSettings.AppSettings["fromMail"].ToString();
            this._toMailSystems = ConfigurationSettings.AppSettings["toMailSystems"].ToString();

           
            rutaArchivosArray = Directory.GetFiles(pathDocumentsRead, "*.*");
            

            foreach (String rutaArchivo in rutaArchivosArray)
            {
                String consigneeName = String.Empty;
                String listMailsCustomerService = String.Empty;
                String subject = String.Empty;
                String body = String.Empty;
                String extension = String.Empty;
                String nombreArchivo = String.Empty;
                String commodityNo = String.Empty;
                String nombreArchivoSinExtension = String.Empty;
                String nuevaRuta = String.Empty;
                String nombreFolder = String.Empty;
                Int32 num = 0;
                Int32 groupID = 0;


                archivoInfo = new FileInfo(rutaArchivo);
                extension = archivoInfo.Extension;
                nombreArchivo = archivoInfo.Name;
                nombreArchivoSinExtension = archivoInfo.Name.Replace(extension, String.Empty);

                try
                {
                    if (archivoInfo.Length <= maxSize)
                    {
                        if (nombreArchivo.Contains(separator))
                        {
                            commodityNo = nombreArchivo.Substring(0, nombreArchivo.IndexOf(separator));
                        }
                        else
                        {
                            objImgComM.commodityNo = nombreArchivoSinExtension;
                            objImgComM.extension = extension;
                            commodityNo = nombreArchivoSinExtension;
                            nombreArchivo = objImgComBL.getNewFileName(objImgComM);
                        }
                        objImgComM.commodityNo = commodityNo;
                        objImgComM.fileName = nombreArchivo;
                        num = objImgComBL.saveImageCommodity(objImgComM, "d");

                        if (num > 0)
                        {
                            String[] arrayNameGroupID;
                            arrayNameGroupID = objImgComBL.getConsigneeCommodity(objImgComM).Split('|');
                            consigneeName = arrayNameGroupID[0];
                            groupID = Int32.Parse(arrayNameGroupID[1]);
                            objImgComM.groupID = groupID;
                            listMailsCustomerService = objImgComBL.getEmailAddressCustomerService(objImgComM);
                            nuevaRuta = pathDocumentsComm + @"\" + nombreArchivo;
                            if (File.Exists(nuevaRuta))
                            {
                                archivoInfo.CopyTo(nuevaRuta, true);
                                archivoInfo.Delete();
                                body = "Se ha actualizado la imagen " + nombreArchivo + " al commodity " + commodityNo;
                            }
                            else
                            {
                                archivoInfo.MoveTo(nuevaRuta);
                                body = "Se ha relacionado la imagen " + nombreArchivo + " al commodity " + commodityNo;
                            }
                            subject = "Imagen Commodity " + commodityNo + " - " + consigneeName.ToUpper().Trim();
                            objSendMail.EnviarMail(listMailsCustomerService, fromMail, subject, body, serverSMTP, userSMTP, passwordSMTP);
                        }
                        else
                        {
                            nuevaRuta = pathDocImgRelComm_NoProcesados + @"\" + nombreArchivo;
                            if (File.Exists(nuevaRuta))
                            {
                                archivoInfo.CopyTo(nuevaRuta, true);
                                archivoInfo.Delete();
                            }
                            else
                            {
                                archivoInfo.MoveTo(nuevaRuta);
                            }
                            body = "La imagen " + nombreArchivo + " no se pudo relacionar con el commodity " + commodityNo;
                            subject = "Imagen Commodity " + commodityNo;
                            objSendMail.EnviarMail(toMailSystems, fromMail, subject, body, serverSMTP, userSMTP, passwordSMTP);
                        }
                    }
                    else
                    {
                       
                            nuevaRuta = pathDocImgRelComm_NoProcesados + @"\" + nombreArchivo;
                            if (File.Exists(nuevaRuta))
                            {
                                archivoInfo.CopyTo(nuevaRuta, true);
                                archivoInfo.Delete();
                            }
                            else
                            {
                                archivoInfo.MoveTo(nuevaRuta);
                            }
                            subject = "El documento " + nombreArchivo + " ha excedido el tamaño límite.";
                            body = "El documento " + nombreArchivo + " ha excedido el tamaño límite.<b> Tamaño: " + Decimal.Round(archivoInfo.Length / 1024, 3).ToString() + "KB.</b><br>";
                            body = body + "Ha sido movido a la carpeta <b>" + pathDocImgRelComm_NoProcesados + "</b> con el nombre: " + nombreArchivo;

                            objSendMail.EnviarMail(toMailSystems, fromMail, subject, body, serverSMTP, userSMTP, passwordSMTP);
                        
                    }
                }
                catch (Exception ex)
                {
                    ExceptionManager.Publish(ex);
                    throw ex;
                }

            }

        }


    }
}
